package com.xiguanlezz.cn.api.remote.request;

import com.xiguanlezz.cn.api.remote.Payload;
import lombok.Getter;
import lombok.Setter;
import org.apache.commons.collections.MapUtils;

import java.util.Map;
import java.util.TreeMap;

/**
 * @Author：习惯了种种
 * @CreateDate：2024/11/19 11:03
 * @Description：请求父类
 */
// 为啥要实现Payload接口？只是为了方便将请求和响应类注册，这样就能使用类加载器加载Payload接口就可以扫描到所有请求响应对象
public abstract class Request implements Payload {
    @Setter
    @Getter
    private String requestId; /* 请求id */

    // Nacos客户端和服务端交互时，会将serviceName、group、clusterName放到header中
    private final Map<String, String> headers = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);


    public void putHeader(String key, String value) {
        headers.put(key, value);
    }

    public void putAllHeader(Map<String, String> headers) {
        if (MapUtils.isEmpty(headers)) {
            return;
        }
        this.headers.putAll(headers);
    }

    public String getHeader(String key) {
        return headers.get(key);
    }

    public String getHeader(String key, String defaultValue) {
        return headers.getOrDefault(key, defaultValue);
    }

    public Map<String, String> getHeaders() {
        return headers;
    }

    public void clearHeaders() {
        this.headers.clear();
    }
}
